Raidenネットワークに参加してめそコインを今度はコーディングなしで発行してみた
暗号通貨界隈があいかわらず騒がしいですが、Ethereumの技術開発はかまわず日進月歩に進んでいます。
前回、Solidityでスマートコントラクトを記述してERC20準拠トークン「めそコイン」をRinkebyテストネットで発行しましたが、実はコーディングなしでERC20トークンを発行する方法があります。さらにその方法で、コントラクトアドレスへのトークン誤送信によるロックアップ防止とトークン購入時のethの送金手数料をERC20の半額にする仕様を備えたERC223トークンへの対応も近々可能になります。
ブロックチェーン技術が普及(端的には暗号通貨の送金トランザクションの増加)するにしたがって、ネットワークは混雑し、優先してトランザクションを承認してもらうための手数料は高騰しています。これはさばけるトランザクション数が既存のデータベース技術に比べて劣るブロックチェーンの宿命で、ビットコインの場合はそれを緩和するためにブロックサイズを引き上げる議論がコミュニティー内で決裂し、ハードフォークしてビットコインキャッシュという競合通貨が誕生しました。
しかしブロックサイズの引き上げはそれを伝播、維持できるノードの運用を難しくするため、分散型台帳というブロックチェーンの生命線になる特徴を失う恐れがあり、またビットコインと違ってブロックサイズがマイナーの投票で決まるシステムを採用しているEthereumでもトランザクション飽和によるネットワークの渋滞は度々起こっているため、スケーリング問題を解決するものとは言えません。
ブロックチェーンのスケーリング問題はブロックチェーンを使っている限りついてまわるもので、様々なアプローチで解決策が練られていますが残念ながら全てを解決する魔法の技術はありえません。しかし送金に限ったセカンドレイヤーのトラストレスネットワークは、現在最も有力かつ精力的に開発、実証が行われている技術です。
ビットコインではLightning Network、EthereumではRaidenという技術プロトコルで、現在、ともにテストネットで複数の実装と実験が繰り返されています。
AWSでEthereumノードを立ち上げ、Raidenネットワークに参加する
あいかわらず枕が長いですが、Raidenネットワークに参加すると送金に使うカスタムトークンが自動で作れるというハナシです。Raidenは現在Ropstenというテストネットで立ち上げることになっているので、前回のRinkebyで流通しているめそコインと幸い重複しません。では早速やってみましょう。
AWSでUbuntu、c4.large、EBS:16GBのEC2インスタンスを立ち上げます。Ropstenは5GB超のブロックデータがあり、それを検証しながら同期するためにそれなりのCPUパワーが必要です。t2インスタンスではすぐにCPUクレジットが尽きてしまうのでm4かc4を選択するのが無難です。同期が終了したらt2.mediumくらいまでスペックダウンするといいでしょう。
セキュリティーグループは、下記のポートを開けておく必要があります。
ではソフトウェアを入れます。説明を簡単にするためシェルスクリプトにしました。
[gist id="8fdef65efc5fd27242338a7109586567"]
まず依存パッケージおよびソフトウェアのインストールですが、特筆すべきはAPIとアプリケーション作成のためnode.js、npmを導入することと、Solidityのバイトコードコンパイラが必要ということです。Raidenネットワークノードはセカンドレイヤーでありながらそれ自体がEthereumのワールドコンピューター構想の一翼を担うコントラクト執行能力があり、RPCによるアプリケーション基盤でなけれればなりません。
次にEthereumクライアントをインストールします。今回は同期が速いParityを使ってRopstenチェーンを保持します。
RopstenはEthereum最大のテストネットでありながら、Rinkebyと違っていい意味でも悪い意味でも積極的にネットワークを維持管理しようとする人が少なく、公式のbootnodesはほとんどの場合死んでいます。最近ではAzureで動いていた公式ノードがアカウントリシャッフルで全滅し、新規ノード立ち上げが難しくなる時期がありました。そのため、コンフィグファイルに動作が確認されているピアを上書きしています。
スクリプトではParityをバックグラウンドで実行するようにsystemdへサービス化しています。
最後にRaidenをソースからインストールして準備完了です。AWSのネットワークとParityの性能があれば20 - 90分ほどで同期が完了します。
待っていられない方は、現時点でチェーン同期ずみのAMIを公開していますので使ってみてください。フランクフルトリージョンでPublic AMI ami-08049c67 ないしは Raidenを検索すれば出てきます。
アカウント作成とRaidenの起動、そしてトークンの発行
SSHでいくつかのポートをトンネルして接続し直します。
ssh -L 8545:127.0.0.1:8545 -L 8546:127.0.0.1:8546 -L 8180:127.0.0.1:8180 -L 5001:127.0.0.1:5001 -i "XXX.pem" ubuntu@ec2-XXX-XXX-XXX-XXX.eu-central-1.compute.amazonaws.com
ブラウザで 127.0.0.1:8081 を開いてParityでアカウントを作成します。
ウォレットアプリからアカウントを作成し、適当にRopsten ethを送金して持ち高を作っておきます。アカウントを作れば
~/.local/share/io.parity.ethereum/keys/test
にパスワード保護されたプライベートキーが保存されますが、バグで保存されないことがあるのでその場合はWebUIのExportからJSONファイルを生成してそのディレクトリに手動で配置します。
raiden --keystore-path ~/.local/share/io.parity.ethereum/keys/test --console
Raidenをまずはコンソールで起動します。
Parityで作ったアカウントを指定し、パスワードを入れてクライアントを開放するとRaidenの操作を受け付けるようになります。早速めそコインを発行数100000、小数点以下2で発行します。
token_address = tools.create_token(initial_alloc=10000, name="Metho Coin", symbol="MTC", decimals=2)
たったこれだけです。
Etherscanでコントラクトが発行されていることが確認できます。小数点以下を2にしているため、総発行数100.00MTCと表示されます。
トークン発行元としてParityにめそコインをロードします。
こちらは 127.0.0.1:5001 でアクセスしたRaidenのWebUIです。発行されためそコインがネットワークに参加可能な状態で登録、公開されています。
時間帯的に適当な送金実験相手が見つけられなかったため今回はここまでですが、トークンネットワーク参加者は直接チャネルで繋がっていなくてもどこかでペイメントチャネルを開いて入ればリレーされて決済を行うことができます。
Raidenノードは無数の決済業務がある小売りや取引所での利用が見込まれますが、APIを公開してモバイルアプリ等へ開放することでカスタムトークンのチャージ式ウォレットを作ることもできます。テストネットとはいえ、たった1台のサーバーで自社通貨を発行して世界中で Ready to use の状態にできるのは驚くべき技術だと思います。
クラスメソッドで、ヨーロッパリージョンで勤務しませんか? クラスメソッドでは、日本、バンクーバー、ベルリンで一緒に働く仲間を募集しています! 採用情報 | クラスメソッド株式会社